﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;
using DiscoveryLogic.Analytics.DataObjects;
using DiscoveryLogic.Analytics.DataObjects.Visuals;

namespace DiscoveryLogic.Analytics.Diagrams.Physics.Renderers
{
    public delegate void OnFinishedGraphRendering();

	public interface IGraphRenderer
	{
	    event OnFinishedGraphRendering GraphRenderFinished;

        /// <summary>
        /// 
        /// </summary>
        bool IsStopped { get; set; }
	    
		/// <summary>
		/// 
		/// </summary>
		/// <param name="vertices"></param>
		/// <param name="edges"></param>
		/// <param name="constraintRect"></param>
		/// <param name="iteration"></param>
		/// <param name="attractForceConst"></param>
		/// <param name="repellingForceConst"></param>
		void UpdatePositions(List<Vertice> vertices, List<Edge> edges,
			Rect constraintRect, int iteration, double attractForceConst, double repellingForceConst);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="dc"></param>
		/// <param name="netVisual"></param>
		/// <param name="vertices"></param>
		/// <param name="edges"></param>
		void RenderEdges(
            DrawingContext dc, NetworkVisual netVisual,
            List<Vertice> vertices, List<Edge> edges);
	}
}
